Описание
Задает или возвращает значение, определяющее режим блокировки,
который будет действовать при изменении записей.
Значение
Задаваемое или возвращаемое значение является выражением типа
Boolean, указывающим режим блокировки, описание которого приведено в
следующей таблице.
True По умолчанию. Определяет режим жесткой блокировки. Страница размером 2 Кбайт, содержащая изменяемую запись, будет заблокирована сразу после вызова метода Edit. False Определяет режим нежесткой блокировки. Содержащая запись страница размером 2 Кбайт не будет заблокирована до вызова метод Update.
Замечания
Свойство LockEdits применимо к обновляемым объектам
Recordset.
Если страница заблокирована, то ни один из других
пользователей не сможет изменять записи на этой странице. Если для свойства
LockEdits задано значение True, и другой пользователь уже
заблокировал страницу, то при вызове метода Edit возникает ошибка. Другим
пользователям разрешается чтение данных с блокированных страниц.
Если для
свойства LockEdits задано значение False, то ошибка возникает при
вызове метода Update для страницы, заблокированной другим пользователем.
Для просмотра изменений, внесенных в запись другим пользователем, следует
вызвать метод Move с аргументом 0. Однако в этом случае все внесенные
вами в запись изменения будут потеряны.
При работе с источниками данных
ODBC, подключенными к ядру Microsoft Jet, свойство
LockEdits всегда получает значение False, т.е. устанавливается
режим нежесткой блокировки. В ядре базы данных Microsoft Jet отсутствуют
средства контроля над механизмами блокировки, используемыми на серверах внешних
баз данных.
Пользователь имеет возможность установить значение свойства
LockEdits при первом открытии объекта Recordset с помощью
аргумента блокировки метода OpenRecordset. Указанная в аргументе
блокировки константа dbPessimistic задает для свойства LockEdits
значение True, а любое другое значение аргумента блокировки устанавливает
для свойства LockEdits значение False.
Пример
Следующая программа демонстрирует установление жесткой блокировки с
помощью значения True свойства LockEdits, а затем установление
нежесткой блокировки с помощью значения False свойства LockEdits.
Иллюстрируется также способ обработки ошибок, требуемый при изменении значения
поля в сетевой базе данных. Для выполнения данной процедуры требуются функции
PessimisticLock и OptimisticLock.
Sub LockEditsX() Dim dbsNorthwind As Database Dim rstCustomers As Recordset Dim strOldName As String Set dbsNorthwind = OpenDatabase("Борей.mdb") Set rstCustomers = dbsNorthwind.OpenRecordset("Клиенты", dbOpenDynaset) With rstCustomers ' Сохраняет исходные данные. strOldName = !Название If MsgBox("Демонстрация жесткой блокировки...", vbOKCancel) = vbOK Then ' Попытка изменить данные при действующей ' жесткой блокировке. If PessimisticLock(rstCustomers, !Название, "Мухомор") Then MsgBox "Запись успешно изменена." ' Восстанавливает исходные данные... .Edit !Название = strOldName .Update End If End If If MsgBox("Демонстрация нежесткой блокировки...", vbOKCancel) = vbOK Then ' Попытка изменить данные при действующей ' нежесткой блокировке. If OptimisticLock(rstCustomers, !Название, "Мухомор") Then MsgBox "Запись успешно изменена." ' Восстанавливает исходные данные... .Edit !Название = strOldName .Update End If End If .Close End With dbsNorthwind.Close End Sub Function PessimisticLock(rstTemp As Recordset, fldTemp As Field, strNew As String) As Boolean dim ErrLoop as Error PessimisticLock = True With rstTemp .LockEdits = True ' После задания для свойства LockEdits значения True, ' перехватываются ошибки при вызове метода Edit. On Error GoTo Err_Lock .Edit On Error GoTo 0 ' Если метод Edit еще выполняется, ошибки не возникают; ' пользователь имеет возможность изменять данные. If .EditMode = dbEditInProgress Then fldTemp = strNew .Update .Bookmark = .LastModified Else ' Загружает текущую запись для просмотра изменений, ' сделанных другим пользователем. .Move 0 End If End With Exit Function Err_Lock: If DBEngine.Errors.Count > 0 Then ' Отображает семейство Errors. For Each errLoop In DBEngine.Errors MsgBox "Код ошибки: " & errLoop.Number & vbCr & errLoop.Description Next errLoop PessimisticLock = False End If Resume Next End Function Function OptimisticLock(rstTemp As Recordset, fldTemp As Field, strNew As String) As Boolean dim ErrLoop as Error OptimisticLock = True With rstTemp .LockEdits = False .Edit fldTemp = strNew ' После задания для свойства LockEdits значения False, ' перехватываются ошибки при вызове метода Update. On Error GoTo Err_Lock .Update On Error GoTo 0 ' Если метод Edit не выполняется, ошибки не возникают; ' пользователь имеет возможность изменять данные. If .EditMode = dbEditNone Then ' Переводит указатель текущей записи на последнюю ' измененную запись. .Bookmark = .LastModified Else .CancelUpdate ' Загружает текущую запись для просмотра изменений, ' сделанных другим пользователем. .Move 0 End If End With Exit Function Err_Lock: If DBEngine.Errors.Count > 0 Then ' Отображает семейство Errors. For Each errLoop In DBEngine.Errors MsgBox "Код ошибки: " & errLoop.Number & vbCr & errLoop.Description Next errLoop OptimisticLock = False End If Resume Next End Function